﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Media;

namespace Chequeo_de_Bolsas_Reembolse
{
    public partial class frmProceso : Form
    {
        private String codMaterial;
        private String desMaterial;
        private String lotMaterial;
        private String cantMaterial;
        private String corte;
        private int cont;
        private int hora;
        private int minuto;
        private int segundo;

        public frmProceso()
        {
            InitializeComponent();
        }

        private void frmProceso_Load(object sender, EventArgs e)
        {
            pcbCorrecta.Visible = false;
            pcbIncorrecta.Visible = false;
            gpbDatosChequeo.Visible = false;
            tsbtnEliminar.Enabled = false;
            tsbtnGuardar.Enabled = false;
            tsbtnNuevo.Enabled = false;

            cargarData();

            this.ActiveControl = tstxtCodigoIngresado.Control;
            tstxtCodigoIngresado.Text = "(240)(10)";
        }

        public void cargarVariables(String codigo, String descripcion, String lote, String cantidad, String check)
        {
            ////datos para configurar el chequeo
            codMaterial = codigo;
            desMaterial = descripcion;
            lotMaterial = lote;
            cantMaterial = cantidad;
            corte = check;

        }

        private void cargarData()
        {
            try
            {
                //crear tabla para mostrar los datos de chequeo
                dgvBolsasChequeadas.ColumnCount = 4;
                dgvBolsasChequeadas.ColumnHeadersVisible = true;
                dgvBolsasChequeadas.Columns[0].Name = "Material";
                dgvBolsasChequeadas.Columns[1].Name = "Descripcion";
                dgvBolsasChequeadas.Columns[2].Name = "Lote";
                dgvBolsasChequeadas.Columns[3].Name = "Estado";
                dgvBolsasChequeadas.Columns[0].Name = "Código Material";
                dgvBolsasChequeadas.Columns[1].Name = "Descripción";
                dgvBolsasChequeadas.Columns[2].Name = "Lote";
                dgvBolsasChequeadas.Columns[3].Name = "Estado";
                dgvBolsasChequeadas.Columns[0].Width = 130;
                dgvBolsasChequeadas.Columns[1].Width = 230;
                dgvBolsasChequeadas.Columns[2].Width = 100;
                dgvBolsasChequeadas.Columns[3].Width = 100;
                timer1.Start();
               
            }
            catch
            {
                MessageBox.Show("Error al intentar cargar los datos!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void tstxtCodigoIngresado_KeyPress(object sender, KeyPressEventArgs e)
        {   //formato de codigo ingresado (240)xxxxxxxx(10)xxxxxxxxx
            if (e.KeyChar == (char)13)
            {
                verificarBolsa();
            }
        }

        private void verificarBolsa()
        {
           
            //obtencion del codigo del material, de la descripcion, del lote del codigo ingresado
            String codigo = tstxtCodigoIngresado.Text.Substring(5, 8);
            String lote = tstxtCodigoIngresado.Text.Substring(17, 9);
            String descripcion = DatosReembolse.obtenerDescripcion(codigo, lote);
            //checkbox corte seleccionado
            if (corte.Equals("SI"))
            {
               
                    //chequea el codigo ingresado y pone correcto o incorrecto
                    if (codMaterial.Equals(codigo) && lotMaterial.Equals(lote))
                    {
                        this.pcbIncorrecta.Visible = false;
                        this.pcbCorrecta.Visible = true;
                        SoundPlayer simpleSound = new SoundPlayer(Application.StartupPath + @"\Sonidos\Correcto.wav");
                        simpleSound.Play();
                        //cargar los datos en la tabla y actualizar
                        
                        this.dgvBolsasChequeadas.Rows.Add(codigo, descripcion, lote, "Correcta");
                        this.dgvBolsasChequeadas.Update();
                    }
                    else
                    {
                        this.pcbCorrecta.Visible = false;
                        this.pcbIncorrecta.Visible = true;
                        SoundPlayer simpleSound = new SoundPlayer(Application.StartupPath + @"\Sonidos\Error.wav");
                        simpleSound.Play();
                        //cargar los datos en la tabla y actualizar
                        if (string.IsNullOrEmpty(descripcion))
                        {
                            this.dgvBolsasChequeadas.Rows.Add(codigo, "ERROR!!", lote, "Incorrecta");
                        }
                        else
                        {
                            this.dgvBolsasChequeadas.Rows.Add(codigo, descripcion, lote, "Incorrecta"); 
                        }
                        
                        this.dgvBolsasChequeadas.Update();
                    }
                    cont++;

                    int cantidad = Convert.ToInt32(cantMaterial);
                    //si se llego a la cantidad indicada cortar
                if (cantidad == cont)
                {
                    //muestra los datos del chequeo
                    chequeoFinalizado();
                }
        }
            else
            {
                //chequea el codigo ingresado y pone correcto o incorrecto
                if (codMaterial.Equals(codigo) && lotMaterial.Equals(lote))
                {
                    this.pcbIncorrecta.Visible = false;
                    this.pcbCorrecta.Visible = true;
                    SoundPlayer simpleSound = new SoundPlayer(Application.StartupPath + @"\Sonidos\Correcto.wav");
                    simpleSound.Play();
                    //cargar los datos en la tabla y actualizar
                    this.dgvBolsasChequeadas.Rows.Add(codigo, descripcion, lote,"Correcta");
                    this.dgvBolsasChequeadas.Update();
                }
                else
                {
                    this.pcbCorrecta.Visible = false;
                    this.pcbIncorrecta.Visible = true;
                    SoundPlayer simpleSound = new SoundPlayer(Application.StartupPath + @"\Sonidos\Error.wav");
                    simpleSound.Play();
                    //cargar los datos en la tabla y actualizar
                    if (string.IsNullOrEmpty(descripcion))
                    {
                        this.dgvBolsasChequeadas.Rows.Add(codigo, "ERROR!!", lote, "Incorrecta");
                    }
                    else
                    {
                        this.dgvBolsasChequeadas.Rows.Add(codigo, descripcion, lote, "Incorrecta");
                    }
                    this.dgvBolsasChequeadas.Update();
                }
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            //tiempo del proceso de chequeo
            if (minuto == 61)
            {
                hora += 1;
                minuto = 0;
            }
            if (segundo == 61)
            {
                minuto += 1;
                segundo = 0;
            }
            segundo += 1;
            lblTiempo.Text = hora.ToString() + ":" + minuto.ToString() + ":" + segundo.ToString();
        }

        private void tsbtnDetener_Click(object sender, EventArgs e)
        {
            chequeoFinalizado();
            tsbtnDetener.Enabled = false;
            tsbtnNuevo.Enabled = true;
            tsbtnGuardar.Enabled = true;
            tsbtnEliminar.Enabled = true;
        }

        private void chequeoFinalizado()
        {
            int correctas = 0;
            int incorrectas = 0;
            //indicar fin del chequeo
            MessageBox.Show("Chequeo finalizado!!", "Exito", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            SoundPlayer simpleSound = new SoundPlayer(Application.StartupPath + @"\Sonidos\Fin.wav");
            simpleSound.Play();
            pcbCorrecta.Visible = true;
            pcbIncorrecta.Visible = false;

            //mostrar datos del chequeo
            gpbDatosChequeo.Visible = true;
            lblChequedas.Text = dgvBolsasChequeadas.RowCount.ToString();
            //contar las correctas y las incorrectas
            for (int i = 0; i < dgvBolsasChequeadas.RowCount; i++)
            {
                if (dgvBolsasChequeadas[3, i].Value.Equals("Correcta"))
                {
                    correctas++;
                }
                else
                {
                    incorrectas++;
                }
            }
            timer1.Stop();
            lblCorrectas.Text = correctas.ToString();
            lblIncorrectas.Text = incorrectas.ToString();
            tstxtCodigoIngresado.Visible = false;

            tsbtnDetener.Enabled = false;
            tsbtnNuevo.Enabled = true;
            tsbtnGuardar.Enabled = true;
            tsbtnEliminar.Enabled = true;
        }

        private void tsbtnNuevo_Click(object sender, EventArgs e)
        {
            tstxtCodigoIngresado.Visible = true;
            tsbtnDetener.Enabled = true;
            tsbtnNuevo.Enabled = false;
            tsbtnGuardar.Enabled = false;
            tsbtnEliminar.Enabled = false;
            pcbCorrecta.Visible = false;
            pcbIncorrecta.Visible = false;
            gpbDatosChequeo.Visible = false;
            tsbtnEliminar.Enabled = false;
            tsbtnGuardar.Enabled = false;
            tsbtnNuevo.Enabled = false;
            dgvBolsasChequeadas.Rows.Clear();

            this.ActiveControl = tstxtCodigoIngresado.Control;
            tstxtCodigoIngresado.Text = "(240)(10)";
        }

        private void tsbtnEliminar_Click(object sender, EventArgs e)
        {
            tstxtCodigoIngresado.Visible = true;
            tsbtnDetener.Enabled = true;
            tsbtnNuevo.Enabled = false;
            tsbtnGuardar.Enabled = false;
            tsbtnEliminar.Enabled = false;
            pcbCorrecta.Visible = false;
            pcbIncorrecta.Visible = false;
            gpbDatosChequeo.Visible = false;
            tsbtnEliminar.Enabled = false;
            tsbtnGuardar.Enabled = false;
            tsbtnNuevo.Enabled = false;
            dgvBolsasChequeadas.Rows.Clear();

            MessageBox.Show("Datos Eliminados!!", "Exito", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

        }

        private void tsbtnGuardar_Click(object sender, EventArgs e)
        {
            Reporte.exportarAExcel(dgvBolsasChequeadas, lblCorrectas.Text, lblIncorrectas.Text, desMaterial, lotMaterial, lblTiempo.Text, lblChequedas.Text);
        }

    }
}
